<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Role extends CI_Model
{

    /**
     * 添加用户组
     * @param $name
     * @return array
     */
    public function add($name)
    {
        $this->db->insert('role', ['name' => $name]);
        $id = $this->db->insert_id();
        return ['id' => $id, 'name' => $name];
    }


    /**
     * 修改用户组（名称）
     * @param $roleId
     * @param $name
     * @return bool|CI_DB_result
     */
    public function mod($roleId, $name)
    {
        return $this->db->where('id', $roleId)->update('role', ['name' => $name]);
    }


    /**
     * 删除用户组
     * @param $roleId
     * @return bool
     */
    public function delete($roleId)
    {
        // 开启事务
        $this->db->trans_begin();

        // 删除用户组
        $this->db->delete('role', ['id' => $roleId]);

        // 删除功能模块
        $this->db->delete('roleModule', ['rid' => $roleId]);

        // 事务提交
        if ($this->db->trans_status() === false) {
            $this->db->trans_rollback();
            return false;
        } else {
            $this->db->trans_commit();
            return true;
        }
    }


    /**
     * 修改用户组菜单
     * @param $roleId
     * @param $menuId
     * @return bool
     */
    public function modMenu($roleId, $menuId)
    {
        // 开启事务
        $this->db->trans_begin();

        // 删除原菜单
        $this->db->delete('roleMenu', ['rid' => $roleId]);

        // 写入新新菜单
        $roleMenu = [];
        foreach ($menuId AS $i) {
            $roleMenu[] = ['rid' => $roleId, 'mid' => $i];
        }
        $this->db->insert_batch('roleMenu', $roleMenu);

        // 事务提交
        if ($this->db->trans_status() === false) {
            $this->db->trans_rollback();
            return false;
        } else {
            $this->db->trans_commit();
            return true;
        }
    }


    /**
     * 修改用户组权限
     * @param $roleId
     * @param $moduleId
     * @param $meid 菜单ID
     * @return bool
     */
    public function modModule($roleId, $moduleId,$meid)
    {
        // 开启事务
        $this->db->trans_begin();

        $ids_arr=$this->db->select('id')->where('mid',$meid)->get('module')->result_array();
        $id_arr=array();
        foreach($ids_arr as $val){
            array_push($id_arr,$val['id']);
        }
        // 删除原菜单权限模块
        $this->db->where_in("mid",$id_arr)
            ->delete('roleModule', ['rid' => $roleId]);

        // 写入新新菜单权限模块
        $roleModule = [];

        foreach ($moduleId AS $i) {
            $roleModule[] = ['rid' => $roleId, 'mid' => $i];
        }
        if(!empty($roleModule)){
             $this->db->insert_batch('roleModule', $roleModule);
        }


        // 事务提交
        if ($this->db->trans_status() === false) {
            $this->db->trans_rollback();
            return false;
        } else {
            $this->db->trans_commit();
            return true;
        }
    }

    /**
     * 通过ID,返回角色名称
     * @param  array  $idArr [id数组]
     * @return [string]        [角色的字符串]
     */
    public function roleNameByID(array $idArr)
    {
        $data = $this->db->select('name')->where_in('id',$idArr)->where('id >',1)->get('role')->result_array();
        $str = '';
        foreach($data as $v)
        {
            $str .= $v['name'].";";
        }
        return $str;
    }

}
